package creatorMode.singletonPattern.hungry;

import creatorMode.singletonPattern.lazy.Singleton2;

//类被加载了，instance就会被初始化
public class Singleton3 {
    private static Singleton3 instance=new Singleton3();

    private Singleton3(){

    }
    public static Singleton3 getInstance(){
        return  instance;
    }
}
/**
 * 无论是否调用,都会生成
 * 静态变量 instance 在类加载的 初始化阶段（类加载过程的最后一步）被赋值。
 * Java 虚拟机（JVM）会保证类的初始化是线程安全的，即 多个线程同时加载类时，只有一个线程能执行初始化，其他线程会阻塞等待。
 * 因此，new Singleton() 只会被执行一次，instance 的初始化是原子性的，不会出现重复创建的问题。
 * 性能影响：类加载过程（尤其是初始化）可能阻塞其他线程，但通常发生在服务启动阶段，对运行时影响极小
 */

//类加载是线程安全的，由 JVM 内部同步机制保证，即使多个线程同时触发加载同一个类，也只会加载一次

/**
 * JVM不会一次性加载所有类，而是按需加载
 * 主动引用的时候，才会加载
 * new实例化对象
 * 访问类的静态变量(非final)或静态方法
 * 反射调用
 * 初始化子类
 * 作为程序入口的主类
 * =========
 * 不会触发类加载:
 * 访问final static 常量
 * 以该类声明数组类型
 * 引用类的Class对象
 */


